查看原文
其他

Region Migration 使用指南 — 如何迁移 Datanode 数据表分区

Wenkang Xu GreptimeDB 2024-04-02


自 0.6 版本起,GreptimeDB 分布式版本具备了将 Datanode 上的数据表分区(Region)数据迁移到另一个 Datanode 的能力。在上一篇《Region Migration 技术原理》的文章中,我们详细介绍了 Region Migration 实现的具体的技术细节。

本文将演示如何使用这项功能。

(数据表分区迁移示意图)


预告

还来得及!再次插播一条 GreptimeDB v0.7 技术分享直播预告!

点击链接 🔗 预约今晚(周四) 19:30 的视频号直播,🔍 详细了解 GreptimeDB v0.7 的架构设计和功能逻辑,和我们的核心工程师面对面 👇

🎁 点击下方直播链接立即预约,进入直播间还机会获得限量版礼品哦~


01
前置条件


开始之前请确保环境中的分布式集群满足以下条件;若不满足任意一项,都将导致 Region Migration 失败。
  • 使用 Remote WAL

  • 使用共享存储(例:AWS S3)


我们以名为 monitor 的数据表为例,并演示如何将数据表分区(Region)迁移到另一个 Datanode 节点上。CREATE TABLE monitor (
  host STRING,
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP() TIME INDEX,
  cpu DOUBLE DEFAULT 0,
  memory DOUBLE,
  PRIMARY KEY(host));


并写入一些数据:
INSERT INTO monitor
VALUES
    ("127.0.0.1", 17024331410000.50.2),
    ("127.0.0.2", 17024331410000.30.1),
    ("127.0.0.1", 17024331460000.30.2),
    ("127.0.0.2", 17024331460000.20.4),
    ("127.0.0.1", 17024331510000.40.3),
    ("127.0.0.2", 17024331510000.20.4);


1.1 查询数据表分区(Region)分布首先我们需要查询该数据表分区(Region)分布情况,即查询数据表中的 Region 分别在哪一些 Datanode 节点上。select
    b.peer_id as datanode_id,
    a.greptime_partition_id as region_id
from 
    information_schema.partitions a 
    left join 
    information_schema.greptime_region_peers b
    on a.greptime_partition_id = b.region_id
where a.table_name='monitor'
order by datanode_id asc;


查询结果如下,该数据表总共包含一个 Region,Region ID 为 4398046511104,并在运行在 Datanode ID 为 1 的节点上。+-------------+---------------+
| datanode_id | region_id     |
+-------------+---------------+
|           1 | 4398046511104 |
+-------------+---------------+
1 row in set (0.01 sec)


1.2 执行 Region 迁移

我们可以将数据表的 Region 迁移至另一个不同的节点上(演示集群包含 3 个 Datanode 节点,ID 分别为 0、1、2)。


如下所示,会将 ID 为 4398046511104 的 Region 迁移至 Datanode ID 为 2 的节点上。


🌟 第四个参数为可选参数(默认值为 10s),用于设置迁移 Region 的 Replay Timeout (secs)。若 Kafka 到 Datanode 之间节点网络带宽过小且导致无法按时完成迁移时,可适当调大该参数。 select migrate_region(43980465111041260);


+------------------------------------------------------------------+
| migrate_region(Int64(4398046511104),Int64(1),Int64(2),Int64(60)) |
+------------------------------------------------------------------+
0f65f485-2790-4bf3-8b71-74f73ef15457                             |
+------------------------------------------------------------------+
1 row in set (0.00 sec)


迁移执行后会返回执行迁移的 Procedure ID,可通过该 ID 查询迁移状态。


1.3 查询迁移状态

select procedure_state('0f65f485-2790-4bf3-8b71-74f73ef15457');


+---------------------------------------------------------------+
| procedure_state(Utf8("0f65f485-2790-4bf3-8b71-74f73ef15457")) |
+---------------------------------------------------------------+
| {"status":"Done"}                                             |
+---------------------------------------------------------------+
1 row in set (0.00 sec)


当查询返回 status 为 Done 时,表明该 Procedure 已成功执行完成。


1.4 查询迁移后的 Table  Region 信息当我们再次查询 Table Region 信息时,可以注意到 Region 已经被迁移到 ID 为 2 的 Datanode 上。select * from information_schema.greptime_region_peers;


+---------------+---------+--------------------------------------------------------------+-----------+--------+--------------+
| region_id     | peer_id | peer_addr                                                    | is_leader | status | down_seconds |
+---------------+---------+--------------------------------------------------------------+-----------+--------+--------------+
4398046511104 |       2 | greptimedb-datanode-2.greptimedb-datanode.my-greptimedb:4001 | Yes       | ALIVE  |         NULL |
+---------------+---------+--------------------------------------------------------------+-----------+--------+--------------+
1 row in set (0.02 sec)


02
更多内容


想了解更多关于 GreptimeDB 分布式版本的内容,欢迎阅读相关文章,更深入了解 GreptimeDB 的分布式能力,发挥更大的价值。


本篇文章旨在帮助您充分认识和使用 GreptimeDB 分布式版本的强大功能,为您的数据管理和分布式计算带来更大的便利和效益。若在使用中遇到任何疑问或困难,我们鼓励您查阅相关文档,以深入理解系统的各个方面。

同时,社区也是一个宝贵的支持网络,欢迎您积极参与讨论,向经验丰富的用户和开发团队请教,获取及时而专业的支持。如果您遇到任何问题,欢迎前往 GitHub Discussion 进行讨论,也可以扫码添加下方小助手微信,加入技术交流群。我们期待您的反馈!



关于 Greptime

Greptime 格睿科技专注于为智能汽车、物联网及可观测等产生大量时序数据的领域提供实时、高效的数据存储和分析服务,帮助客户挖掘数据的深层价值。目前主要有以下四款产品:
  • GreptimeDB 是一款用 Rust 语言编写的时序数据库,具有分布式、开源、云原生、兼容性强等特点,帮助企业实时读写、处理和分析时序数据的同时,降低长期存储的成本。


  • GreptimeCloud 基于开源的 GreptimeDB,为用户提供全托管的 DBaaS,能够与可观测性、物联网等领域结合的应用产品结合。利用云提供软件和服务,可以达到快速的自助开通和交付,标准化的运维支持,和更好的资源弹性。现已正式公测,欢迎关注公众号或官网了解最新动态!


  • GreptimeAI 是为 LLM 应用量身定制的可观测性解决方案,开发者可以通过该方案全面、深入地了解应用的成本、性能、流量和安全情况,在保证低成本和高性能的同时提供高效可靠的分析能力,同时保留了时序数据库的灵活性。


  • 车云一体解决方案 是一款深入车企实际业务场景的时序数据库解决方案,解决了企业车辆数据呈几何倍数增长后的实际业务痛点。


GreptimeCloud 和 GreptimeAI 已正式公测,欢迎关注公众号或官网了解最新动态!我们提供 GreptimDB Enterprise 版本,如有需要欢迎联系小助手(微信搜索 greptime 或扫描下方二维码添加)。



GreptimeDB 作为开源项目,欢迎对时序数据库、Rust 语言等内容感兴趣的同学们参与贡献和讨论。第一次参与项目的同学推荐先从带有 Good First Issue 标签的 Issue 入手,期待在开源社群里遇见你!


Star us on GitHub Now:

https://github.com/GreptimeTeam/greptimedb


官网:https://greptime.cn/

文档:https://docs.greptime.cn/

Twitter: https://twitter.com/Greptime

Slack: https://greptime.com/slack

LinkedIn: https://www.linkedin.com/company/greptime/

往期精彩文章:


👇 点击下方阅读原文,立即体验最新版的 GreptimeDB!

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存